using System;
using System.Collections;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace ViewLED.Model
{
    public class FileExplorer
    {
        public static ArrayList PICTURE = new ArrayList(".jpg|.jpeg|.png|.bmp".Split('|'));  // 支持的图片扩展名列表
        public static ArrayList VIDEO = new ArrayList(".mp4|.avi|.wmv".Split('|'));          // 支持的视频扩展名列表
        public static string APP_PATH = System.AppDomain.CurrentDomain.BaseDirectory;

        // which 类型，whole 是否为完整路径
        public static ArrayList listFile(string which, bool whole)
        {
            // 获取程序本身所在路径并加上要获取的播放类型所在路径
            // Picture：图片路径  Text：富文本路径  Video：视频路径
            string path = APP_PATH + which;
            ArrayList al = new ArrayList();

            // 若不存在路径则创建该路径
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            else
            {
                // 获得目录信息
                DirectoryInfo theFolder = new DirectoryInfo(path);
                FileInfo[] dirInfo = theFolder.GetFiles();

                foreach (FileInfo NextFile in dirInfo)
                {
                    // 获取每个文件的扩展名并小写
                    string e = NextFile.Extension.ToLower();
                    // 添加获取到的合规文件到列表
                    if (e == ".rtf" || PICTURE.Contains(e) || VIDEO.Contains(e))
                    {
                        // 判断是否要求完整路径
                        if (whole)
                        {
                            al.Add(path + "\\" + NextFile.Name);
                        }
                        else
                        {
                            al.Add(NextFile.Name);
                        }
                    }
                }
            }

            return al;
        }

        // 删除文件
        public static bool removeFile(string path)
        {
            if (Model.ScreenManager.isScreenShow())
            {
                MessageBox.Show("删除失败，对外播放过程中不允许删除文件！请先退出对外播放再操作。", "错误提示");
                return false;
            }
            try
            {
                // 检查要操作的文件是否存在
                if (File.Exists(APP_PATH + path))
                {
                    FileInfo fi = new FileInfo(APP_PATH + path);
                    // 去掉只读属性
                    if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
                        fi.Attributes = FileAttributes.Normal;
                    File.Delete(APP_PATH + path);
                }
                return true;
            }
            catch
            {
                MessageBox.Show("删除失败，请检查您的用户权限或文件状态！可能本文件正在被软件使用中，请稍后重试或退出后处理。", "错误提示");
                return false;
            }
        }

        // 添加新文件进来
        public static bool addFile(string src, string dest)
        {
            try
            {
                // 检查是否有同名文件
                if (File.Exists(dest) || src == dest)
                {
                    MessageBox.Show("添加失败，同名文件已存在！", "错误提示");
                    return false;
                }
                File.Copy(src, dest);
                return true;
            }
            catch
            {
                MessageBox.Show("添加失败，请检查您的用户权限或文件状态！", "错误提示");
                return false;
            }
        }

        // 编辑文件
        public static void editFile(string path)
        {
            try
            {
                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "wordpad.exe";
                psi.Arguments = "\"" + path + "\"";
                Process.Start(psi);
            }
            catch
            {
                MessageBox.Show("编辑器加载失败，请检查您的用户权限或文件状态！可能本文件正在被软件使用中，请稍后重试或退出后处理。", "错误提示");
            }
        }

        // 添加一个富文本文件
        public static void createFile(string filename)
        {
            if (File.Exists(APP_PATH + filename + ".rtf") || File.Exists(APP_PATH + filename + ".RTF"))
            {
                MessageBox.Show("添加失败，同名文件已存在！", "错误提示");
                return;
            }
            try
            {
                File.Copy(APP_PATH + "BASE.RTF", APP_PATH + filename + ".rtf");
                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "wordpad.exe";
                psi.Arguments = "\"" + APP_PATH + filename + ".rtf\"";
                Process.Start(psi);
            }
            catch
            {
                MessageBox.Show("创建失败，请检查您的用户权限或文件状态！", "错误提示");
            }
        }

        // 设定配置文件App.config的参数
        public static void setConfig(string key, string val)
        {
            Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            cfa.AppSettings.Settings[key].Value = val;
            cfa.Save();
            ConfigurationManager.RefreshSection("appSettings");
        }
    }
}